//! 诊断工具 - 查看服务器内部数据状态
//!
//! 这个工具用于验证服务器内部存储的数据，解决"黑盒子"问题

use nacos_storage::memory::MemoryStorage;
use nacos_naming::service::NamingServiceImpl;
use nacos_config::service::ConfigServiceImpl;
use std::sync::Arc;
use tokio;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("🔍 Nacos服务器诊断工具");
    println!("=".repeat(50));
    
    // 创建与服务器相同的存储配置
    let storage = Arc::new(MemoryStorage::new());
    
    // 模拟服务器数据
    println!("📊 检查内存存储状态...");
    
    // 创建命名服务
    let naming_service = Arc::new(NamingServiceImpl::new(storage.clone()));
    let config_service = Arc::new(ConfigServiceImpl::new(storage.clone()));
    
    // 检查存储中的实际数据
    check_storage_contents(&storage).await;
    
    Ok(())
}

async fn check_storage_contents(storage: &MemoryStorage) {
    println!("📋 存储内容检查:");
    
    // 获取所有键
    let keys = storage.keys("*").await.unwrap_or_default();
    println!("🔢 总键数: {}", keys.len());
    
    for key in keys {
        if let Ok(Some(value)) = storage.get(&key).await {
            let value_str = String::from_utf8_lossy(&value);
            println!("🗝️  {}: {}", key, value_str);
        }
    }
    
    if keys.is_empty() {
        println!("💾 存储为空");
    }
    
    // 检查特定前缀的数据
    let service_keys = storage.keys("service:*").await.unwrap_or_default();
    let config_keys = storage.keys("config:*").await.unwrap_or_default();
    
    println!("\n🏷️  服务实例数: {}", service_keys.len());
    for key in service_keys {
        if let Ok(Some(value)) = storage.get(&key).await {
            let value_str = String::from_utf8_lossy(&value);
            println!("   📌 {}: {}", key, value_str);
        }
    }
    
    println!("\n⚙️  配置项数: {}", config_keys.len());
    for key in config_keys {
        if let Ok(Some(value)) = storage.get(&key).await {
            let value_str = String::from_utf8_lossy(&value);
            println!("   🔧 {}: {}", key, value_str);
        }
    }
}